/*
 * Copyright Codeplay Software Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use these files except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// DO NOT MODIFY BY HAND
// This file was automatically generated by generate_transpose_tests.py.
// Results calculated using Tensorflow v1.12.0.

#include <gtest/gtest.h>
#include <vector>

#include "test/transpose/transpose_fixture.h"
#include "test/types/kernel_data_types.h"
#include "test/types/to_gtest_types.h"

using DataTypeList = sycldnn::types::KernelDataTypes;
using GTestTypeList = sycldnn::types::ToGTestTypes<DataTypeList>::type;

template <typename DataType>
using Tranpose3D = TransposeFixture<DataType>;
TYPED_TEST_SUITE(Tranpose3D, GTestTypeList);
TYPED_TEST(Tranpose3D, T3D_2x2x2_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 3., 4., 5., 6., 7., 8.};
  const std::vector<int> sizes = {2, 2, 2};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x2_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3., 2., 4., 5., 7., 6., 8.};
  const std::vector<int> sizes = {2, 2, 2};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x2_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 5., 6., 3., 4., 7., 8.};
  const std::vector<int> sizes = {2, 2, 2};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x2_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5., 2., 6., 3., 7., 4., 8.};
  const std::vector<int> sizes = {2, 2, 2};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x2_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3., 5., 7., 2., 4., 6., 8.};
  const std::vector<int> sizes = {2, 2, 2};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x2_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5., 3., 7., 2., 6., 4., 8.};
  const std::vector<int> sizes = {2, 2, 2};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x3_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 3., 4.,  5.,  6.,
                                         7., 8., 9., 10., 11., 12.};
  const std::vector<int> sizes = {2, 2, 3};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x3_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 4.,  2., 5.,  3., 6.,
                                         7., 10., 8., 11., 9., 12.};
  const std::vector<int> sizes = {2, 2, 3};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x3_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 3., 7.,  8.,  9.,
                                         4., 5., 6., 10., 11., 12.};
  const std::vector<int> sizes = {2, 2, 3};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x3_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7.,  2., 8.,  3., 9.,
                                         4., 10., 5., 11., 6., 12.};
  const std::vector<int> sizes = {2, 2, 3};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x3_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 4.,  7., 10., 2., 5.,
                                         8., 11., 3., 6.,  9., 12.};
  const std::vector<int> sizes = {2, 2, 3};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x3_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7.,  4., 10., 2., 8.,
                                         5., 11., 3., 9.,  6., 12.};
  const std::vector<int> sizes = {2, 2, 3};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x4_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2.,  3.,  4.,  5.,  6.,  7.,  8.,
                                         9., 10., 11., 12., 13., 14., 15., 16.};
  const std::vector<int> sizes = {2, 2, 4};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x4_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5.,  2.,  6.,  3.,  7.,  4.,  8.,
                                         9., 13., 10., 14., 11., 15., 12., 16.};
  const std::vector<int> sizes = {2, 2, 4};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x4_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 3., 4., 9.,  10., 11., 12.,
                                         5., 6., 7., 8., 13., 14., 15., 16.};
  const std::vector<int> sizes = {2, 2, 4};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x4_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 9.,  2., 10., 3., 11., 4., 12.,
                                         5., 13., 6., 14., 7., 15., 8., 16.};
  const std::vector<int> sizes = {2, 2, 4};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x4_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5., 9.,  13., 2., 6., 10., 14.,
                                         3., 7., 11., 15., 4., 8., 12., 16.};
  const std::vector<int> sizes = {2, 2, 4};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x2x4_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 9.,  5., 13., 2., 10., 6., 14.,
                                         3., 11., 7., 15., 4., 12., 8., 16.};
  const std::vector<int> sizes = {2, 2, 4};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x2_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 3., 4.,  5.,  6.,
                                         7., 8., 9., 10., 11., 12.};
  const std::vector<int> sizes = {2, 3, 2};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x2_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3., 5.,  2., 4.,  6.,
                                         7., 9., 11., 8., 10., 12.};
  const std::vector<int> sizes = {2, 3, 2};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x2_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2.,  7., 8., 3.,  4.,
                                         9., 10., 5., 6., 11., 12.};
  const std::vector<int> sizes = {2, 3, 2};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x2_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7.,  2., 8.,  3., 9.,
                                         4., 10., 5., 11., 6., 12.};
  const std::vector<int> sizes = {2, 3, 2};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x2_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3., 5., 7., 9.,  11.,
                                         2., 4., 6., 8., 10., 12.};
  const std::vector<int> sizes = {2, 3, 2};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x2_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7., 3., 9.,  5., 11.,
                                         2., 8., 4., 10., 6., 12.};
  const std::vector<int> sizes = {2, 3, 2};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x3_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1.,  2.,  3.,  4.,  5.,  6.,
                                         7.,  8.,  9.,  10., 11., 12.,
                                         13., 14., 15., 16., 17., 18.};
  const std::vector<int> sizes = {2, 3, 3};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x3_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1.,  4.,  7.,  2.,  5.,  8.,
                                         3.,  6.,  9.,  10., 13., 16.,
                                         11., 14., 17., 12., 15., 18.};
  const std::vector<int> sizes = {2, 3, 3};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x3_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 3., 10., 11., 12.,
                                         4., 5., 6., 13., 14., 15.,
                                         7., 8., 9., 16., 17., 18.};
  const std::vector<int> sizes = {2, 3, 3};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x3_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 10., 2., 11., 3., 12.,
                                         4., 13., 5., 14., 6., 15.,
                                         7., 16., 8., 17., 9., 18.};
  const std::vector<int> sizes = {2, 3, 3};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x3_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 4., 7., 10., 13., 16.,
                                         2., 5., 8., 11., 14., 17.,
                                         3., 6., 9., 12., 15., 18.};
  const std::vector<int> sizes = {2, 3, 3};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x3_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 10., 4., 13., 7., 16.,
                                         2., 11., 5., 14., 8., 17.,
                                         3., 12., 6., 15., 9., 18.};
  const std::vector<int> sizes = {2, 3, 3};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x4_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.};
  const std::vector<int> sizes = {2, 3, 4};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x4_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  9.,  2.,  6.,  10., 3.,  7.,  11., 4.,  8.,  12.,
      13., 17., 21., 14., 18., 22., 15., 19., 23., 16., 20., 24.};
  const std::vector<int> sizes = {2, 3, 4};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x4_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2.,  3.,  4.,  13., 14., 15., 16.,
                                         5., 6.,  7.,  8.,  17., 18., 19., 20.,
                                         9., 10., 11., 12., 21., 22., 23., 24.};
  const std::vector<int> sizes = {2, 3, 4};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x4_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 13., 2.,  14., 3.,  15., 4.,  16.,
                                         5., 17., 6.,  18., 7.,  19., 8.,  20.,
                                         9., 21., 10., 22., 11., 23., 12., 24.};
  const std::vector<int> sizes = {2, 3, 4};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x4_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 5., 9.,  13., 17., 21., 2., 6., 10., 14., 18., 22.,
      3., 7., 11., 15., 19., 23., 4., 8., 12., 16., 20., 24.};
  const std::vector<int> sizes = {2, 3, 4};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x3x4_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1.,  13., 5.,  17., 9., 21., 2.,  14.,
                                         6.,  18., 10., 22., 3., 15., 7.,  19.,
                                         11., 23., 4.,  16., 8., 20., 12., 24.};
  const std::vector<int> sizes = {2, 3, 4};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x2_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2.,  3.,  4.,  5.,  6.,  7.,  8.,
                                         9., 10., 11., 12., 13., 14., 15., 16.};
  const std::vector<int> sizes = {2, 4, 2};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x2_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3.,  5.,  7.,  2.,  4.,  6.,  8.,
                                         9., 11., 13., 15., 10., 12., 14., 16.};
  const std::vector<int> sizes = {2, 4, 2};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x2_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 9.,  10., 3., 4., 11., 12.,
                                         5., 6., 13., 14., 7., 8., 15., 16.};
  const std::vector<int> sizes = {2, 4, 2};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x2_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 9.,  2., 10., 3., 11., 4., 12.,
                                         5., 13., 6., 14., 7., 15., 8., 16.};
  const std::vector<int> sizes = {2, 4, 2};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x2_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3., 5., 7., 9.,  11., 13., 15.,
                                         2., 4., 6., 8., 10., 12., 14., 16.};
  const std::vector<int> sizes = {2, 4, 2};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x2_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 9.,  3., 11., 5., 13., 7., 15.,
                                         2., 10., 4., 12., 6., 14., 8., 16.};
  const std::vector<int> sizes = {2, 4, 2};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x3_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.};
  const std::vector<int> sizes = {2, 4, 3};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x3_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  4.,  7.,  10., 2.,  5.,  8.,  11., 3.,  6.,  9.,  12.,
      13., 16., 19., 22., 14., 17., 20., 23., 15., 18., 21., 24.};
  const std::vector<int> sizes = {2, 4, 3};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x3_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 2., 3., 13., 14., 15., 4.,  5.,  6.,  16., 17., 18.,
      7., 8., 9., 19., 20., 21., 10., 11., 12., 22., 23., 24.};
  const std::vector<int> sizes = {2, 4, 3};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x3_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 13., 2.,  14., 3.,  15., 4.,  16.,
                                         5., 17., 6.,  18., 7.,  19., 8.,  20.,
                                         9., 21., 10., 22., 11., 23., 12., 24.};
  const std::vector<int> sizes = {2, 4, 3};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x3_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 4., 7., 10., 13., 16., 19., 22.,
                                         2., 5., 8., 11., 14., 17., 20., 23.,
                                         3., 6., 9., 12., 15., 18., 21., 24.};
  const std::vector<int> sizes = {2, 4, 3};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x3_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 13., 4., 16., 7., 19., 10., 22.,
                                         2., 14., 5., 17., 8., 20., 11., 23.,
                                         3., 15., 6., 18., 9., 21., 12., 24.};
  const std::vector<int> sizes = {2, 4, 3};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x4_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11.,
      12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22.,
      23., 24., 25., 26., 27., 28., 29., 30., 31., 32.};
  const std::vector<int> sizes = {2, 4, 4};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x4_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  9.,  13., 2.,  6.,  10., 14., 3.,  7.,  11.,
      15., 4.,  8.,  12., 16., 17., 21., 25., 29., 18., 22.,
      26., 30., 19., 23., 27., 31., 20., 24., 28., 32.};
  const std::vector<int> sizes = {2, 4, 4};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x4_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  17., 18., 19., 20., 5.,  6.,  7.,
      8.,  21., 22., 23., 24., 9.,  10., 11., 12., 25., 26.,
      27., 28., 13., 14., 15., 16., 29., 30., 31., 32.};
  const std::vector<int> sizes = {2, 4, 4};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x4_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  17., 2.,  18., 3.,  19., 4.,  20., 5.,  21., 6.,
      22., 7.,  23., 8.,  24., 9.,  25., 10., 26., 11., 27.,
      12., 28., 13., 29., 14., 30., 15., 31., 16., 32.};
  const std::vector<int> sizes = {2, 4, 4};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x4_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5., 9.,  13., 17., 21., 25., 29.,
                                         2., 6., 10., 14., 18., 22., 26., 30.,
                                         3., 7., 11., 15., 19., 23., 27., 31.,
                                         4., 8., 12., 16., 20., 24., 28., 32.};
  const std::vector<int> sizes = {2, 4, 4};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_2x4x4_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 17., 5., 21., 9.,  25., 13., 29.,
                                         2., 18., 6., 22., 10., 26., 14., 30.,
                                         3., 19., 7., 23., 11., 27., 15., 31.,
                                         4., 20., 8., 24., 12., 28., 16., 32.};
  const std::vector<int> sizes = {2, 4, 4};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x2_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 3., 4.,  5.,  6.,
                                         7., 8., 9., 10., 11., 12.};
  const std::vector<int> sizes = {3, 2, 2};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x2_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3., 2., 4.,  5.,  7.,
                                         6., 8., 9., 11., 10., 12.};
  const std::vector<int> sizes = {3, 2, 2};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x2_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 5., 6., 9.,  10.,
                                         3., 4., 7., 8., 11., 12.};
  const std::vector<int> sizes = {3, 2, 2};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x2_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5., 9.,  2., 6., 10.,
                                         3., 7., 11., 4., 8., 12.};
  const std::vector<int> sizes = {3, 2, 2};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x2_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3., 5., 7., 9.,  11.,
                                         2., 4., 6., 8., 10., 12.};
  const std::vector<int> sizes = {3, 2, 2};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x2_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5., 9.,  3., 7., 11.,
                                         2., 6., 10., 4., 8., 12.};
  const std::vector<int> sizes = {3, 2, 2};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x3_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1.,  2.,  3.,  4.,  5.,  6.,
                                         7.,  8.,  9.,  10., 11., 12.,
                                         13., 14., 15., 16., 17., 18.};
  const std::vector<int> sizes = {3, 2, 3};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x3_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1.,  4.,  2.,  5.,  3.,  6.,
                                         7.,  10., 8.,  11., 9.,  12.,
                                         13., 16., 14., 17., 15., 18.};
  const std::vector<int> sizes = {3, 2, 3};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x3_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1.,  2.,  3.,  7.,  8.,  9.,
                                         13., 14., 15., 4.,  5.,  6.,
                                         10., 11., 12., 16., 17., 18.};
  const std::vector<int> sizes = {3, 2, 3};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x3_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7.,  13., 2., 8.,  14.,
                                         3., 9.,  15., 4., 10., 16.,
                                         5., 11., 17., 6., 12., 18.};
  const std::vector<int> sizes = {3, 2, 3};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x3_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 4., 7., 10., 13., 16.,
                                         2., 5., 8., 11., 14., 17.,
                                         3., 6., 9., 12., 15., 18.};
  const std::vector<int> sizes = {3, 2, 3};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x3_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7., 13., 4., 10., 16.,
                                         2., 8., 14., 5., 11., 17.,
                                         3., 9., 15., 6., 12., 18.};
  const std::vector<int> sizes = {3, 2, 3};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x4_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.};
  const std::vector<int> sizes = {3, 2, 4};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x4_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  2.,  6.,  3.,  7.,  4.,  8.,  9.,  13., 10., 14.,
      11., 15., 12., 16., 17., 21., 18., 22., 19., 23., 20., 24.};
  const std::vector<int> sizes = {3, 2, 4};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x4_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 2., 3., 4., 9.,  10., 11., 12., 17., 18., 19., 20.,
      5., 6., 7., 8., 13., 14., 15., 16., 21., 22., 23., 24.};
  const std::vector<int> sizes = {3, 2, 4};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x4_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 9.,  17., 2., 10., 18., 3., 11., 19., 4., 12., 20.,
      5., 13., 21., 6., 14., 22., 7., 15., 23., 8., 16., 24.};
  const std::vector<int> sizes = {3, 2, 4};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x4_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 5., 9.,  13., 17., 21., 2., 6., 10., 14., 18., 22.,
      3., 7., 11., 15., 19., 23., 4., 8., 12., 16., 20., 24.};
  const std::vector<int> sizes = {3, 2, 4};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x2x4_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 9.,  17., 5., 13., 21., 2., 10., 18., 6., 14., 22.,
      3., 11., 19., 7., 15., 23., 4., 12., 20., 8., 16., 24.};
  const std::vector<int> sizes = {3, 2, 4};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x2_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1.,  2.,  3.,  4.,  5.,  6.,
                                         7.,  8.,  9.,  10., 11., 12.,
                                         13., 14., 15., 16., 17., 18.};
  const std::vector<int> sizes = {3, 3, 2};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x2_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1.,  3.,  5.,  2.,  4.,  6.,
                                         7.,  9.,  11., 8.,  10., 12.,
                                         13., 15., 17., 14., 16., 18.};
  const std::vector<int> sizes = {3, 3, 2};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x2_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 7.,  8.,  13., 14.,
                                         3., 4., 9.,  10., 15., 16.,
                                         5., 6., 11., 12., 17., 18.};
  const std::vector<int> sizes = {3, 3, 2};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x2_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7.,  13., 2., 8.,  14.,
                                         3., 9.,  15., 4., 10., 16.,
                                         5., 11., 17., 6., 12., 18.};
  const std::vector<int> sizes = {3, 3, 2};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x2_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1.,  3.,  5.,  7.,  9.,  11.,
                                         13., 15., 17., 2.,  4.,  6.,
                                         8.,  10., 12., 14., 16., 18.};
  const std::vector<int> sizes = {3, 3, 2};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x2_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7.,  13., 3., 9.,  15.,
                                         5., 11., 17., 2., 8.,  14.,
                                         4., 10., 16., 6., 12., 18.};
  const std::vector<int> sizes = {3, 3, 2};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x3_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12., 13., 14.,
      15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25., 26., 27.};
  const std::vector<int> sizes = {3, 3, 3};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x3_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  4.,  7.,  2.,  5.,  8.,  3.,  6.,  9.,  10., 13., 16., 11., 14.,
      17., 12., 15., 18., 19., 22., 25., 20., 23., 26., 21., 24., 27.};
  const std::vector<int> sizes = {3, 3, 3};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x3_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  10., 11., 12., 19., 20., 21., 4.,  5.,  6.,  13., 14.,
      15., 22., 23., 24., 7.,  8.,  9.,  16., 17., 18., 25., 26., 27.};
  const std::vector<int> sizes = {3, 3, 3};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x3_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  10., 19., 2.,  11., 20., 3.,  12., 21., 4.,  13., 22., 5., 14.,
      23., 6.,  15., 24., 7.,  16., 25., 8.,  17., 26., 9.,  18., 27.};
  const std::vector<int> sizes = {3, 3, 3};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x3_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  4.,  7.,  10., 13., 16., 19., 22., 25., 2.,  5.,  8.,  11., 14.,
      17., 20., 23., 26., 3.,  6.,  9.,  12., 15., 18., 21., 24., 27.};
  const std::vector<int> sizes = {3, 3, 3};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x3_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  10., 19., 4.,  13., 22., 7.,  16., 25., 2.,  11., 20., 5., 14.,
      23., 8.,  17., 26., 3.,  12., 21., 6.,  15., 24., 9.,  18., 27.};
  const std::vector<int> sizes = {3, 3, 3};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x4_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.,
      25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.};
  const std::vector<int> sizes = {3, 3, 4};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x4_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  9.,  2.,  6.,  10., 3.,  7.,  11., 4.,  8.,  12.,
      13., 17., 21., 14., 18., 22., 15., 19., 23., 16., 20., 24.,
      25., 29., 33., 26., 30., 34., 27., 31., 35., 28., 32., 36.};
  const std::vector<int> sizes = {3, 3, 4};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x4_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 2.,  3.,  4.,  13., 14., 15., 16., 25., 26., 27., 28.,
      5., 6.,  7.,  8.,  17., 18., 19., 20., 29., 30., 31., 32.,
      9., 10., 11., 12., 21., 22., 23., 24., 33., 34., 35., 36.};
  const std::vector<int> sizes = {3, 3, 4};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x4_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 13., 25., 2.,  14., 26., 3.,  15., 27., 4.,  16., 28.,
      5., 17., 29., 6.,  18., 30., 7.,  19., 31., 8.,  20., 32.,
      9., 21., 33., 10., 22., 34., 11., 23., 35., 12., 24., 36.};
  const std::vector<int> sizes = {3, 3, 4};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x4_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  9.,  13., 17., 21., 25., 29., 33., 2.,  6.,  10.,
      14., 18., 22., 26., 30., 34., 3.,  7.,  11., 15., 19., 23.,
      27., 31., 35., 4.,  8.,  12., 16., 20., 24., 28., 32., 36.};
  const std::vector<int> sizes = {3, 3, 4};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x3x4_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  13., 25., 5.,  17., 29., 9., 21., 33., 2.,  14., 26.,
      6.,  18., 30., 10., 22., 34., 3., 15., 27., 7.,  19., 31.,
      11., 23., 35., 4.,  16., 28., 8., 20., 32., 12., 24., 36.};
  const std::vector<int> sizes = {3, 3, 4};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x2_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.};
  const std::vector<int> sizes = {3, 4, 2};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x2_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  3.,  5.,  7.,  2.,  4.,  6.,  8.,  9.,  11., 13., 15.,
      10., 12., 14., 16., 17., 19., 21., 23., 18., 20., 22., 24.};
  const std::vector<int> sizes = {3, 4, 2};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x2_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 2., 9.,  10., 17., 18., 3., 4., 11., 12., 19., 20.,
      5., 6., 13., 14., 21., 22., 7., 8., 15., 16., 23., 24.};
  const std::vector<int> sizes = {3, 4, 2};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x2_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 9.,  17., 2., 10., 18., 3., 11., 19., 4., 12., 20.,
      5., 13., 21., 6., 14., 22., 7., 15., 23., 8., 16., 24.};
  const std::vector<int> sizes = {3, 4, 2};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x2_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 3., 5., 7., 9.,  11., 13., 15., 17., 19., 21., 23.,
      2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24.};
  const std::vector<int> sizes = {3, 4, 2};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x2_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 9.,  17., 3., 11., 19., 5., 13., 21., 7., 15., 23.,
      2., 10., 18., 4., 12., 20., 6., 14., 22., 8., 16., 24.};
  const std::vector<int> sizes = {3, 4, 2};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x3_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.,
      25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.};
  const std::vector<int> sizes = {3, 4, 3};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x3_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  4.,  7.,  10., 2.,  5.,  8.,  11., 3.,  6.,  9.,  12.,
      13., 16., 19., 22., 14., 17., 20., 23., 15., 18., 21., 24.,
      25., 28., 31., 34., 26., 29., 32., 35., 27., 30., 33., 36.};
  const std::vector<int> sizes = {3, 4, 3};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x3_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  13., 14., 15., 25., 26., 27., 4.,  5.,  6.,
      16., 17., 18., 28., 29., 30., 7.,  8.,  9.,  19., 20., 21.,
      31., 32., 33., 10., 11., 12., 22., 23., 24., 34., 35., 36.};
  const std::vector<int> sizes = {3, 4, 3};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x3_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 13., 25., 2.,  14., 26., 3.,  15., 27., 4.,  16., 28.,
      5., 17., 29., 6.,  18., 30., 7.,  19., 31., 8.,  20., 32.,
      9., 21., 33., 10., 22., 34., 11., 23., 35., 12., 24., 36.};
  const std::vector<int> sizes = {3, 4, 3};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x3_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 4., 7., 10., 13., 16., 19., 22., 25., 28., 31., 34.,
      2., 5., 8., 11., 14., 17., 20., 23., 26., 29., 32., 35.,
      3., 6., 9., 12., 15., 18., 21., 24., 27., 30., 33., 36.};
  const std::vector<int> sizes = {3, 4, 3};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x3_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 13., 25., 4., 16., 28., 7., 19., 31., 10., 22., 34.,
      2., 14., 26., 5., 17., 29., 8., 20., 32., 11., 23., 35.,
      3., 15., 27., 6., 18., 30., 9., 21., 33., 12., 24., 36.};
  const std::vector<int> sizes = {3, 4, 3};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x4_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.,
      25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.,
      37., 38., 39., 40., 41., 42., 43., 44., 45., 46., 47., 48.};
  const std::vector<int> sizes = {3, 4, 4};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x4_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  9.,  13., 2.,  6.,  10., 14., 3.,  7.,  11., 15.,
      4.,  8.,  12., 16., 17., 21., 25., 29., 18., 22., 26., 30.,
      19., 23., 27., 31., 20., 24., 28., 32., 33., 37., 41., 45.,
      34., 38., 42., 46., 35., 39., 43., 47., 36., 40., 44., 48.};
  const std::vector<int> sizes = {3, 4, 4};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x4_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  17., 18., 19., 20., 33., 34., 35., 36.,
      5.,  6.,  7.,  8.,  21., 22., 23., 24., 37., 38., 39., 40.,
      9.,  10., 11., 12., 25., 26., 27., 28., 41., 42., 43., 44.,
      13., 14., 15., 16., 29., 30., 31., 32., 45., 46., 47., 48.};
  const std::vector<int> sizes = {3, 4, 4};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x4_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  17., 33., 2.,  18., 34., 3.,  19., 35., 4.,  20., 36.,
      5.,  21., 37., 6.,  22., 38., 7.,  23., 39., 8.,  24., 40.,
      9.,  25., 41., 10., 26., 42., 11., 27., 43., 12., 28., 44.,
      13., 29., 45., 14., 30., 46., 15., 31., 47., 16., 32., 48.};
  const std::vector<int> sizes = {3, 4, 4};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x4_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 5., 9.,  13., 17., 21., 25., 29., 33., 37., 41., 45.,
      2., 6., 10., 14., 18., 22., 26., 30., 34., 38., 42., 46.,
      3., 7., 11., 15., 19., 23., 27., 31., 35., 39., 43., 47.,
      4., 8., 12., 16., 20., 24., 28., 32., 36., 40., 44., 48.};
  const std::vector<int> sizes = {3, 4, 4};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_3x4x4_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 17., 33., 5., 21., 37., 9.,  25., 41., 13., 29., 45.,
      2., 18., 34., 6., 22., 38., 10., 26., 42., 14., 30., 46.,
      3., 19., 35., 7., 23., 39., 11., 27., 43., 15., 31., 47.,
      4., 20., 36., 8., 24., 40., 12., 28., 44., 16., 32., 48.};
  const std::vector<int> sizes = {3, 4, 4};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x2_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2.,  3.,  4.,  5.,  6.,  7.,  8.,
                                         9., 10., 11., 12., 13., 14., 15., 16.};
  const std::vector<int> sizes = {4, 2, 2};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x2_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3.,  2.,  4.,  5.,  7.,  6.,  8.,
                                         9., 11., 10., 12., 13., 15., 14., 16.};
  const std::vector<int> sizes = {4, 2, 2};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x2_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 5., 6., 9.,  10., 13., 14.,
                                         3., 4., 7., 8., 11., 12., 15., 16.};
  const std::vector<int> sizes = {4, 2, 2};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x2_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5., 9.,  13., 2., 6., 10., 14.,
                                         3., 7., 11., 15., 4., 8., 12., 16.};
  const std::vector<int> sizes = {4, 2, 2};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x2_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 3., 5., 7., 9.,  11., 13., 15.,
                                         2., 4., 6., 8., 10., 12., 14., 16.};
  const std::vector<int> sizes = {4, 2, 2};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x2_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5., 9.,  13., 3., 7., 11., 15.,
                                         2., 6., 10., 14., 4., 8., 12., 16.};
  const std::vector<int> sizes = {4, 2, 2};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x3_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.};
  const std::vector<int> sizes = {4, 2, 3};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x3_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  4.,  2.,  5.,  3.,  6.,  7.,  10., 8.,  11., 9.,  12.,
      13., 16., 14., 17., 15., 18., 19., 22., 20., 23., 21., 24.};
  const std::vector<int> sizes = {4, 2, 3};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x3_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 2., 3., 7.,  8.,  9.,  13., 14., 15., 19., 20., 21.,
      4., 5., 6., 10., 11., 12., 16., 17., 18., 22., 23., 24.};
  const std::vector<int> sizes = {4, 2, 3};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x3_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7.,  13., 19., 2., 8.,  14., 20.,
                                         3., 9.,  15., 21., 4., 10., 16., 22.,
                                         5., 11., 17., 23., 6., 12., 18., 24.};
  const std::vector<int> sizes = {4, 2, 3};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x3_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 4., 7., 10., 13., 16., 19., 22.,
                                         2., 5., 8., 11., 14., 17., 20., 23.,
                                         3., 6., 9., 12., 15., 18., 21., 24.};
  const std::vector<int> sizes = {4, 2, 3};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x3_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7., 13., 19., 4., 10., 16., 22.,
                                         2., 8., 14., 20., 5., 11., 17., 23.,
                                         3., 9., 15., 21., 6., 12., 18., 24.};
  const std::vector<int> sizes = {4, 2, 3};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x4_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11.,
      12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22.,
      23., 24., 25., 26., 27., 28., 29., 30., 31., 32.};
  const std::vector<int> sizes = {4, 2, 4};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x4_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  2.,  6.,  3.,  7.,  4.,  8.,  9.,  13., 10.,
      14., 11., 15., 12., 16., 17., 21., 18., 22., 19., 23.,
      20., 24., 25., 29., 26., 30., 27., 31., 28., 32.};
  const std::vector<int> sizes = {4, 2, 4};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x4_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  9.,  10., 11., 12., 17., 18., 19.,
      20., 25., 26., 27., 28., 5.,  6.,  7.,  8.,  13., 14.,
      15., 16., 21., 22., 23., 24., 29., 30., 31., 32.};
  const std::vector<int> sizes = {4, 2, 4};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x4_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 9.,  17., 25., 2., 10., 18., 26.,
                                         3., 11., 19., 27., 4., 12., 20., 28.,
                                         5., 13., 21., 29., 6., 14., 22., 30.,
                                         7., 15., 23., 31., 8., 16., 24., 32.};
  const std::vector<int> sizes = {4, 2, 4};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x4_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 5., 9.,  13., 17., 21., 25., 29.,
                                         2., 6., 10., 14., 18., 22., 26., 30.,
                                         3., 7., 11., 15., 19., 23., 27., 31.,
                                         4., 8., 12., 16., 20., 24., 28., 32.};
  const std::vector<int> sizes = {4, 2, 4};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x2x4_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 9.,  17., 25., 5., 13., 21., 29.,
                                         2., 10., 18., 26., 6., 14., 22., 30.,
                                         3., 11., 19., 27., 7., 15., 23., 31.,
                                         4., 12., 20., 28., 8., 16., 24., 32.};
  const std::vector<int> sizes = {4, 2, 4};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x2_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.};
  const std::vector<int> sizes = {4, 3, 2};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x2_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  3.,  5.,  2.,  4.,  6.,  7.,  9.,  11., 8.,  10., 12.,
      13., 15., 17., 14., 16., 18., 19., 21., 23., 20., 22., 24.};
  const std::vector<int> sizes = {4, 3, 2};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x2_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 7.,  8.,  13., 14., 19., 20.,
                                         3., 4., 9.,  10., 15., 16., 21., 22.,
                                         5., 6., 11., 12., 17., 18., 23., 24.};
  const std::vector<int> sizes = {4, 3, 2};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x2_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7.,  13., 19., 2., 8.,  14., 20.,
                                         3., 9.,  15., 21., 4., 10., 16., 22.,
                                         5., 11., 17., 23., 6., 12., 18., 24.};
  const std::vector<int> sizes = {4, 3, 2};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x2_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 3., 5., 7., 9.,  11., 13., 15., 17., 19., 21., 23.,
      2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24.};
  const std::vector<int> sizes = {4, 3, 2};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x2_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 7.,  13., 19., 3., 9.,  15., 21.,
                                         5., 11., 17., 23., 2., 8.,  14., 20.,
                                         4., 10., 16., 22., 6., 12., 18., 24.};
  const std::vector<int> sizes = {4, 3, 2};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x3_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.,
      25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.};
  const std::vector<int> sizes = {4, 3, 3};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x3_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  4.,  7.,  2.,  5.,  8.,  3.,  6.,  9.,  10., 13., 16.,
      11., 14., 17., 12., 15., 18., 19., 22., 25., 20., 23., 26.,
      21., 24., 27., 28., 31., 34., 29., 32., 35., 30., 33., 36.};
  const std::vector<int> sizes = {4, 3, 3};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x3_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 2., 3., 10., 11., 12., 19., 20., 21., 28., 29., 30.,
      4., 5., 6., 13., 14., 15., 22., 23., 24., 31., 32., 33.,
      7., 8., 9., 16., 17., 18., 25., 26., 27., 34., 35., 36.};
  const std::vector<int> sizes = {4, 3, 3};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x3_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 10., 19., 28., 2., 11., 20., 29., 3., 12., 21., 30.,
      4., 13., 22., 31., 5., 14., 23., 32., 6., 15., 24., 33.,
      7., 16., 25., 34., 8., 17., 26., 35., 9., 18., 27., 36.};
  const std::vector<int> sizes = {4, 3, 3};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x3_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 4., 7., 10., 13., 16., 19., 22., 25., 28., 31., 34.,
      2., 5., 8., 11., 14., 17., 20., 23., 26., 29., 32., 35.,
      3., 6., 9., 12., 15., 18., 21., 24., 27., 30., 33., 36.};
  const std::vector<int> sizes = {4, 3, 3};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x3_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 10., 19., 28., 4., 13., 22., 31., 7., 16., 25., 34.,
      2., 11., 20., 29., 5., 14., 23., 32., 8., 17., 26., 35.,
      3., 12., 21., 30., 6., 15., 24., 33., 9., 18., 27., 36.};
  const std::vector<int> sizes = {4, 3, 3};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x4_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.,
      25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.,
      37., 38., 39., 40., 41., 42., 43., 44., 45., 46., 47., 48.};
  const std::vector<int> sizes = {4, 3, 4};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x4_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  9.,  2.,  6.,  10., 3.,  7.,  11., 4.,  8.,  12.,
      13., 17., 21., 14., 18., 22., 15., 19., 23., 16., 20., 24.,
      25., 29., 33., 26., 30., 34., 27., 31., 35., 28., 32., 36.,
      37., 41., 45., 38., 42., 46., 39., 43., 47., 40., 44., 48.};
  const std::vector<int> sizes = {4, 3, 4};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x4_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  13., 14., 15., 16., 25., 26., 27., 28.,
      37., 38., 39., 40., 5.,  6.,  7.,  8.,  17., 18., 19., 20.,
      29., 30., 31., 32., 41., 42., 43., 44., 9.,  10., 11., 12.,
      21., 22., 23., 24., 33., 34., 35., 36., 45., 46., 47., 48.};
  const std::vector<int> sizes = {4, 3, 4};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x4_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  13., 25., 37., 2.,  14., 26., 38., 3.,  15., 27., 39.,
      4.,  16., 28., 40., 5.,  17., 29., 41., 6.,  18., 30., 42.,
      7.,  19., 31., 43., 8.,  20., 32., 44., 9.,  21., 33., 45.,
      10., 22., 34., 46., 11., 23., 35., 47., 12., 24., 36., 48.};
  const std::vector<int> sizes = {4, 3, 4};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x4_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 5., 9.,  13., 17., 21., 25., 29., 33., 37., 41., 45.,
      2., 6., 10., 14., 18., 22., 26., 30., 34., 38., 42., 46.,
      3., 7., 11., 15., 19., 23., 27., 31., 35., 39., 43., 47.,
      4., 8., 12., 16., 20., 24., 28., 32., 36., 40., 44., 48.};
  const std::vector<int> sizes = {4, 3, 4};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x3x4_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1., 13., 25., 37., 5., 17., 29., 41., 9.,  21., 33., 45.,
      2., 14., 26., 38., 6., 18., 30., 42., 10., 22., 34., 46.,
      3., 15., 27., 39., 7., 19., 31., 43., 11., 23., 35., 47.,
      4., 16., 28., 40., 8., 20., 32., 44., 12., 24., 36., 48.};
  const std::vector<int> sizes = {4, 3, 4};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x2_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11.,
      12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22.,
      23., 24., 25., 26., 27., 28., 29., 30., 31., 32.};
  const std::vector<int> sizes = {4, 4, 2};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x2_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  3.,  5.,  7.,  2.,  4.,  6.,  8.,  9.,  11., 13.,
      15., 10., 12., 14., 16., 17., 19., 21., 23., 18., 20.,
      22., 24., 25., 27., 29., 31., 26., 28., 30., 32.};
  const std::vector<int> sizes = {4, 4, 2};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x2_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 2., 9.,  10., 17., 18., 25., 26.,
                                         3., 4., 11., 12., 19., 20., 27., 28.,
                                         5., 6., 13., 14., 21., 22., 29., 30.,
                                         7., 8., 15., 16., 23., 24., 31., 32.};
  const std::vector<int> sizes = {4, 4, 2};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x2_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 9.,  17., 25., 2., 10., 18., 26.,
                                         3., 11., 19., 27., 4., 12., 20., 28.,
                                         5., 13., 21., 29., 6., 14., 22., 30.,
                                         7., 15., 23., 31., 8., 16., 24., 32.};
  const std::vector<int> sizes = {4, 4, 2};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x2_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  3.,  5.,  7.,  9.,  11., 13., 15., 17., 19., 21.,
      23., 25., 27., 29., 31., 2.,  4.,  6.,  8.,  10., 12.,
      14., 16., 18., 20., 22., 24., 26., 28., 30., 32.};
  const std::vector<int> sizes = {4, 4, 2};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x2_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {1., 9.,  17., 25., 3., 11., 19., 27.,
                                         5., 13., 21., 29., 7., 15., 23., 31.,
                                         2., 10., 18., 26., 4., 12., 20., 28.,
                                         6., 14., 22., 30., 8., 16., 24., 32.};
  const std::vector<int> sizes = {4, 4, 2};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x3_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.,
      25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.,
      37., 38., 39., 40., 41., 42., 43., 44., 45., 46., 47., 48.};
  const std::vector<int> sizes = {4, 4, 3};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x3_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  4.,  7.,  10., 2.,  5.,  8.,  11., 3.,  6.,  9.,  12.,
      13., 16., 19., 22., 14., 17., 20., 23., 15., 18., 21., 24.,
      25., 28., 31., 34., 26., 29., 32., 35., 27., 30., 33., 36.,
      37., 40., 43., 46., 38., 41., 44., 47., 39., 42., 45., 48.};
  const std::vector<int> sizes = {4, 4, 3};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x3_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  13., 14., 15., 25., 26., 27., 37., 38., 39.,
      4.,  5.,  6.,  16., 17., 18., 28., 29., 30., 40., 41., 42.,
      7.,  8.,  9.,  19., 20., 21., 31., 32., 33., 43., 44., 45.,
      10., 11., 12., 22., 23., 24., 34., 35., 36., 46., 47., 48.};
  const std::vector<int> sizes = {4, 4, 3};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x3_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  13., 25., 37., 2.,  14., 26., 38., 3.,  15., 27., 39.,
      4.,  16., 28., 40., 5.,  17., 29., 41., 6.,  18., 30., 42.,
      7.,  19., 31., 43., 8.,  20., 32., 44., 9.,  21., 33., 45.,
      10., 22., 34., 46., 11., 23., 35., 47., 12., 24., 36., 48.};
  const std::vector<int> sizes = {4, 4, 3};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x3_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  4.,  7.,  10., 13., 16., 19., 22., 25., 28., 31., 34.,
      37., 40., 43., 46., 2.,  5.,  8.,  11., 14., 17., 20., 23.,
      26., 29., 32., 35., 38., 41., 44., 47., 3.,  6.,  9.,  12.,
      15., 18., 21., 24., 27., 30., 33., 36., 39., 42., 45., 48.};
  const std::vector<int> sizes = {4, 4, 3};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x3_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  13., 25., 37., 4.,  16., 28., 40., 7.,  19., 31., 43.,
      10., 22., 34., 46., 2.,  14., 26., 38., 5.,  17., 29., 41.,
      8.,  20., 32., 44., 11., 23., 35., 47., 3.,  15., 27., 39.,
      6.,  18., 30., 42., 9.,  21., 33., 45., 12., 24., 36., 48.};
  const std::vector<int> sizes = {4, 4, 3};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x4_0x1x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12., 13.,
      14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25., 26.,
      27., 28., 29., 30., 31., 32., 33., 34., 35., 36., 37., 38., 39.,
      40., 41., 42., 43., 44., 45., 46., 47., 48., 49., 50., 51., 52.,
      53., 54., 55., 56., 57., 58., 59., 60., 61., 62., 63., 64.};
  const std::vector<int> sizes = {4, 4, 4};
  const std::vector<int> perm = {0, 1, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x4_0x2x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  9.,  13., 2.,  6.,  10., 14., 3.,  7.,  11., 15., 4.,
      8.,  12., 16., 17., 21., 25., 29., 18., 22., 26., 30., 19., 23.,
      27., 31., 20., 24., 28., 32., 33., 37., 41., 45., 34., 38., 42.,
      46., 35., 39., 43., 47., 36., 40., 44., 48., 49., 53., 57., 61.,
      50., 54., 58., 62., 51., 55., 59., 63., 52., 56., 60., 64.};
  const std::vector<int> sizes = {4, 4, 4};
  const std::vector<int> perm = {0, 2, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x4_1x0x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  2.,  3.,  4.,  17., 18., 19., 20., 33., 34., 35., 36., 49.,
      50., 51., 52., 5.,  6.,  7.,  8.,  21., 22., 23., 24., 37., 38.,
      39., 40., 53., 54., 55., 56., 9.,  10., 11., 12., 25., 26., 27.,
      28., 41., 42., 43., 44., 57., 58., 59., 60., 13., 14., 15., 16.,
      29., 30., 31., 32., 45., 46., 47., 48., 61., 62., 63., 64.};
  const std::vector<int> sizes = {4, 4, 4};
  const std::vector<int> perm = {1, 0, 2};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x4_1x2x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  17., 33., 49., 2.,  18., 34., 50., 3.,  19., 35., 51., 4.,
      20., 36., 52., 5.,  21., 37., 53., 6.,  22., 38., 54., 7.,  23.,
      39., 55., 8.,  24., 40., 56., 9.,  25., 41., 57., 10., 26., 42.,
      58., 11., 27., 43., 59., 12., 28., 44., 60., 13., 29., 45., 61.,
      14., 30., 46., 62., 15., 31., 47., 63., 16., 32., 48., 64.};
  const std::vector<int> sizes = {4, 4, 4};
  const std::vector<int> perm = {1, 2, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x4_2x0x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  5.,  9.,  13., 17., 21., 25., 29., 33., 37., 41., 45., 49.,
      53., 57., 61., 2.,  6.,  10., 14., 18., 22., 26., 30., 34., 38.,
      42., 46., 50., 54., 58., 62., 3.,  7.,  11., 15., 19., 23., 27.,
      31., 35., 39., 43., 47., 51., 55., 59., 63., 4.,  8.,  12., 16.,
      20., 24., 28., 32., 36., 40., 44., 48., 52., 56., 60., 64.};
  const std::vector<int> sizes = {4, 4, 4};
  const std::vector<int> perm = {2, 0, 1};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}
TYPED_TEST(Tranpose3D, T3D_4x4x4_2x1x0) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      1.,  17., 33., 49., 5.,  21., 37., 53., 9.,  25., 41., 57., 13.,
      29., 45., 61., 2.,  18., 34., 50., 6.,  22., 38., 54., 10., 26.,
      42., 58., 14., 30., 46., 62., 3.,  19., 35., 51., 7.,  23., 39.,
      55., 11., 27., 43., 59., 15., 31., 47., 63., 4.,  20., 36., 52.,
      8.,  24., 40., 56., 12., 28., 44., 60., 16., 32., 48., 64.};
  const std::vector<int> sizes = {4, 4, 4};
  const std::vector<int> perm = {2, 1, 0};
  const DataType max_input_val = 2048.0;
  this->run(exp_out, sizes, perm, max_input_val, 0, 0);
}